const express = require('express')
// jwt
const jwt=require("jsonwebtoken")
const {expressjwt}=require("express-jwt")
const app = express()
const port = 3000




// 跨域
const cors=require('cors')
app.use(cors())

//解析post表单数据中间件
// const bodyParser=require('body-parser')
// app.use(bodyParser.urlencoded({extended:false}))

app.use(express.json())

// 定义secret密钥，建议将密钥定义为secretKey
const secretKey="ithema"

// 注册还原jwt字符串对象的中间件
// 只要配置成功中间件，就可以把解析出来的用户信息，挂载在req.user身上
app.use(expressjwt({secret:secretKey,algorithms: ["HS256"]}).unless({path:[/^\/api\//]}))




// 登录接口
app.post('/api/login', (req, res) => {
    const userinfo=req.body
    console.log(userinfo)
    // 登录失败
    if(userinfo.username!=='admin'||userinfo.password!=="000000"){
        return res.send({
            status:400,
            message:"登录失败！"
        })
    }
    // 生成jwt的字符串
   const tokenStr= jwt.sign({username:userinfo.username},secretKey,{expiresIn:'1h'})
    return res.send({
        status:0,
        message:"登录成功！",
        token:tokenStr
    })
})

// 获取用户信息
app.get('/admin/getinfo',(req,res)=>{
    console.log(req.auth)
    res.send({
        status:0,
        message:"获取用户信息成功！",
        data:req.auth
    })
})
//捕捉错误
app.use(function (err, req, res, next) {
    if (err.name === "UnauthorizedError") {
      res.status(401).send("invalid token...");
    } else {
      next(err);
    }
  });

app.listen(port, () => console.log(`Example app listening on port ${port}!`))